package org.example.graph_theory;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Complete_reachability_of_digraphs {
    public static void main(String[] args) {
        //有向图的完全可达性

        //题目描述
        //给定一个有向图，包含 N 个节点，节点编号分别为 1，2，...，N。现从 1 号节点开始，如果可以从 1 号节点的边可以到达任何节点，则输出 1，否则输出 -1。
        //输入描述
        //第一行包含两个正整数，表示节点数量 N 和边的数量 K。 后续 K 行，每行两个正整数 s 和 t，表示从 s 节点有一条边单向连接到 t 节点。
        //输出描述
        //如果可以从 1 号节点的边可以到达任何节点，则输出 1，否则输出 -1。
        //输入示例
//        4 4
//        1 2
//        2 1
//        1 3
//        3 4

        Scanner sc = new Scanner(System.in);
        int nodes = sc.nextInt();
        int sides = sc.nextInt();
        ArrayList<List<Integer>> arr = new ArrayList<>();
        for (int i = 0; i < nodes+1; i++) {
            ArrayList<Integer> list = new ArrayList<>();
            arr.add(list);
        }
        boolean[] visited = new boolean[nodes + 1];
        for (int i = 0; i < sides; i++) {
            int fromNode = sc.nextInt();
            int toNode = sc.nextInt();
            arr.get(fromNode).add(toNode);
        }
        dfs(arr,visited,1);
        int flag = 1;
        for (int i = 1; i < visited.length; i++) {
            if (!visited[i]) {
                flag = -1;
                break;
            }
        }
        System.out.println(flag);
    }

    public static void dfs(ArrayList<List<Integer>> arr,boolean[] visited,int node){
        if (visited[node]) return;
        visited[node] = true;
        for (Integer n : arr.get(node)) {
            dfs(arr,visited,n);
        }
    }


    
}
